1 /***
2 * @version $Revision: 1.3 $
3 */
4 package uba.db.sql.interpreter;
5
6 import uba.db.Database;
7 import uba.db.ar.Tupla;
8 import uba.db.ar.TuplaDef;
9 import uba.db.sql.language.Sentence;
10
11 public class QueryPlanner {
12 private Sentence sentence;
13
14 private SentenceQueryPlan queryPlanToUse;
15
16 private Database database;
17
18 /***
19 * Genera el plan de ejecución si la sentencia es válida semánticamente (las
20 * tablas existen, etc).
21 *
22 * @param sqlSentence
23 * El select a ejecutar.
24 * @param database
25 * TODO
26 */
27 public QueryPlanner(Database database) {
28 this.database = database;
29 queryPlanToUse = new NullQueryPlan();
30 }
31
32 public void execute(Sentence sqlSentence) {
33 queryPlanToUse = new NullQueryPlan();
34 sentence = sqlSentence;
35 SentenceTypeVisitor typeVisitor = new SentenceTypeVisitor(this,
36 database);
37 sentence.accept(typeVisitor);
38 queryPlanToUse.startExecution();
39 }
40
41 public void queryPlanToUse(SentenceQueryPlan sentencePlan) {
42 queryPlanToUse = sentencePlan;
43 }
44
45 public boolean hasMoreResults() {
46 return queryPlanToUse.hasMoreResults();
47 }
48
49 public Tupla nextTuple() {
50 return queryPlanToUse.nextTuple();
51 }
52
53 public String currentPlan() {
54 return queryPlanToUse.planDetail();
55 }
56
57 public TuplaDef currentTuplaDefinition() {
58 return queryPlanToUse.tuplaDefinition();
59 }
60 }